package com.zyk.grate_offer.class01;

/**
 * 给定一个非负整数num，
 * 如何不用循环语句，
 * 返回>=num，并且离num最近的，2的某次方
 *
 * @author zhangsan
 * @date 2021/4/21 10:02
 */
public class Code03_Near2Power {

    public static int near2Power(int n) {
        n--;                // -1 防止自己本身就是的的幂次方
        n |= n >>> 1;       // 一下一系列操作, 填充第一个1后边都为1
        n |= n >>> 2;
        n |= n >>> 4;
        n |= n >>> 8;
        n |= n >>> 16;
        return n + 1;       // 返回+1就是离自己最近的2的幂次方
    }

    // for test
    public static void main(String[] args) {
        int n = 5;
        System.out.println(near2Power(n));
    }

}
